gl renderer: Fix shadow node child offset
authorTimm Bäder <mail@baedert.org>
Fri, 19 Jan 2018 14:00:22 +0000 (15:00 +0100)
committerTimm Bäder <mail@baedert.org>
Fri, 19 Jan 2018 14:00:22 +0000 (15:00 +0100)
We shouldn't apply the shadow offset when drawing the child offscreen,
instead apply it afterwards when we draw it to the current render
target.

gsk/gl/gskglrenderer.c

index 71ba645aeb1d7c19399f64c532816b6a019af537..84e74d72dea6374b3bcb08256a8b9af2c131f2ce 100644 (file)
@@ -1327,21 +1327,20 @@ render_shadow_node (GskGLRenderer       *self,
       prev_dx = builder->dx;
       prev_dy = builder->dy;
 
-      ops_offset (builder, dx, dy);
-
       if (gsk_render_node_get_node_type (shadow_child) == GSK_TEXT_NODE)
         {
+          ops_offset (builder, dx, dy);
           render_text_node (self, shadow_child, builder, &shadow->color, TRUE);
           ops_offset (builder, prev_dx, prev_dy);
           continue;
         }
 
+      /* Draw the child offscreen, without the offset. */
       add_offscreen_ops (self, builder,
-                         dx + min_x, dx + max_x, dy + min_y, dy + max_y,
+                         min_x, max_x, min_y, max_y,
                          shadow_child, &texture_id, &is_offscreen, FALSE);
 
-      ops_offset (builder, prev_dx, prev_dy);
-
+      ops_offset (builder, dx, dy);
       ops_set_program (builder, &self->shadow_program);
       ops_set_color (builder, &shadow->color);
       ops_set_texture (builder, texture_id);
@@ -1373,6 +1372,8 @@ render_shadow_node (GskGLRenderer       *self,
 
           ops_draw (builder, vertex_data);
         }
+
+      ops_offset (builder, prev_dx, prev_dy);
     }
 
   /* Now draw the child normally */